home *** CD-ROM | disk | FTP | other *** search
- ε PROGRAMACIO 3D π
-
- Hola! me llamo Skynet y en principio, voy a comenzar una especie de curso de
- scene (ver articulo de demoscene) donde voy a explicar las bases y los funda-
- mentos de la programacion 3D. Este apartado puede que sea mas adelante expli-
- cado por NaviDJ o Lyjak si tubieran esa intencion...
-
- La programacion 3D es importante...es bonita...es la ostia...Bueno, pero todo
- eso cada uno lo sabe, aqui vamos a lo PURO Y DURO: Programacion 3D.
-
- Antes de seguir, hemos de decir que utilizaremos la libreria Graph 2.0 y la
- razon es que ademas de ser gratis, tiene la mayoria de ordenes que utilizaremos
- y ademas, al estar en ASM, esto nos liberara de la carga de aprender ASM y nos
- sera un factor para incrementar la velocidad. En caso de que no funcione podeis
- tener un "Hot line" con su autor. {8-#
- La libreria que mas utilizare es la de PASCAL. Y como tengo algo de experiencia
- en el uso, os dire que el archivo que os pide la TPU "GRFLIB.OBJ" debereis
- especificarlo en el archivo GRFLIB.PAS, Este ya esta especificado con la forma
- {$L path\GRFLIB.OBJ} y debereis habilitar el path, donde hayais gravado la li-
- breria. Despues compilais la unidad a disco y la copiais en el directorio TPU
- del pascal (UNITS o TPU por defecto).
- Despues en cada programa que querais incorporarla, solo tendreis que escribir
- Uses xxx,xxx,Grflib;
-
- LET'S GO WITH 3D!!!
-
- En principio, nos damos cuenta que el monitor solo tiene pantalla 2D, aqui
- esta el principal problema! :) Por tanto, utilizando algoritmos adecuados po-
- dremos suplir esa carencia.
- Como crear un punto es facil: PONPIXEL(X,Y,COLOR,PANTALLA) (O fPONPIXEL)
- X-> Coordenada X de 0 a 65536 (Word)
- Y-> Coordenada Y de 0 a 65536 (Word)
- Color -> Color del punto de 0 a 255 (Byte)
- PANTALLA -> de 0 a 255 (Byte) La pantalla es el lugar donde
- dibujaremos el pixel, si PANTALLA=0 entonces la mostrara en pantalla, pero
- si PANTALLA es asignacion de la orden CREAVIRTUAL.
- .
- PANTALLA:=CREAVIRTUAL; (* Asigna memoria para la creacion de una pantalla
- . virtual que tendra su propio codigo devuelto en
- . la variable pantalla *)
-
- Lo "dificil" sera pasar un punto (X,Y,Z) a (X',Y'), pues la forma de transformar
- es muy facil, ademas de incorporar una variable llamada "D" (Distancia) que
- sera la distancia respecto a nosotros:
-
- X_2D:=(D*X_3D)/Z_3D;
- Y_2D:=(D*Y_3D)/Z_3D;
-
- Mi experiencia personal me ha enseñado que esto es bastante inutil con el uso
- de las matrices, ya que si realizo las operaciones con matrizes 3D el dibujo
- con X e Y es similar al de la tranformacion 3D. Pero no lo es en el uso de
- camaras 3D dirigidas o rotaciones de camaras.
-
- EJEMPLO DE USO: Archivo Stars.Pas (Es el tipico ejemplo...lo siento..)
-
- Una vez sabemos representar un punto en tres dimensiones en la pantalla, lo
- siguiente es saber modificarlo, ya que los puntos en 3D nos pueden servir como
- el esqueleto de vertices de un objeto complejo.
- Las modificaciones basicas que se pueden hacer son las siguientes:
-
- * Rotacion en uno de sus ejes de la estructura de puntos
- * Rotacion multiple de sus ejes
- * Transladar el objeto
- * Escalar el objeto
- * Invertirlo
-
- Para cada opcion, existen algunas operaciones con matrices que realizan la
- operacion deseada. Estas matrices son correctas y podeis consultar mas sobre
- este tipo de matematicas en libros de geometria analitica, algebra lineal,
- trigonometria y similares...( APRENDEDLO SOLO SI OS GUSTA!!! ya que el estudio
- obligado, es el peor castigo :) )
-
- Como deciamos, no vamos a demostrar el porque de esos resultados, solo mostra-
- remos la formula de las matrices, ya que su implementacion es muy facil ademas
- de ser muy rapida.
-
- Translacion: (sintaxis del mathlab)
- [1 0 0 0;
- 0 1 0 0; Donde a=-p(cos(q)*sin(w)) i donde p=Raiz(x^2+y^2+z^2)
- 0 0 1 0; b=-p(sin(q)*sin(w)) q=arctan(x/y)
- a b c 1] c=-p(cos(w)) w=arccos(z/p)
-
- FANTASTICO!! Con solo una operacion, obtenemos una translacion con cordenadas
- esfericas, donde solo tendremos que introducir los datos.
-
- Rotacion:
- Eje Y:
- [ a 0 b; Donde a=cos(Angulo de rotacion Y)
- 0 1 0; b=sin(Angulo de rotacion Y)
- -b 0 a]
-
- Eje Z:
- [ 1 0 0; Donde a=cos(Angulo de rotacion Z)
- 0 a -b; b=sin(Angulo de rotacion Z)
- 0 b a]
-
- Eje X:
- [ a -b 0; Donde a=cos(Angulo de rotacion X)
- b a 0; b=sin(Angulo de rotacion Y)
- 0 0 1]
-
- Una vez tenemos las principales herramientas 3D, unicamente falta aplicarlas
- y como todos estais en la UNIVERSIDAD, se supone que sabreis despejarlas, para
- obtener la rotacion...
- QUE NO SABEIS???!??!!?!?!?? ;-) Luego dicen que la selectividad es dura...
-
- En uno de los programas realizados, la rotacion la he implementadp con los
- seguientes procedimientos. Para reutilitzarlos, unicamente, deberas canviar
- la estructura de los parametros del procedure...
-
- COST =0.999847695156391239157; {Para acelerar el calculo}
- SINT =0.017452406437283512819;
-
- Procedure Rotx(var Dades:Array of TresD);
- Var i : integer;
- Begin
- for i := 0 to MAXVERTEX do
- begin
- dades[i].y := dades[i].y * COST + dades[i].z * SINT;
- dades[i].z :=-dades[i].y * SINT + dades[i].z * COST;
- end;
- End;
-
- Procedure Roty(var dades:Array of TresD);
- Var i : integer;
- Begin
- For i := 0 to MAXVERTEX do
- Begin
- dades[i].x := dades[i].x * COST - dades[i].z * SINT;
- dades[i].z := dades[i].x * SINT + dades[i].z * COST;
- End;
- End;
-
- Procedure Rotz(var dades:Array of TresD);
- Var i : integer;
- Begin
- For i := 0 to MAXVERTEX do
- Begin
- dades[i].x := dades[i].x * COST + dades[i].y * SINT;
- dades[i].y :=-dades[i].x * SINT + dades[i].y * COST;
- End;
- End;
-
- EJEMPLO SKYNET.PAS Como veis, este sencillo programa daria el pego en una
- rutina algo mejorada, con texturas y demas... Lo importante de este ejemplo
- es el motor...
-
-
- RECORDAD LAS NORMAS PRINCIPALES DE PROGRAMACION GRAFICA:
-
- - No calculeis mas cosas de las que hacen falta
- - No hagais 40000 la misma operacion, guardadla
- - Podeis intentar hacer tablas de cosenos prediseñadas
- - No calculeis todos los poligonos con textura, solo los que se ven
- - Coged atajos de programacion
- - Pegadle mucho a vuestro hermano
- - y por ultimo...pero la mas triste:
- en la programacion de demos aun no hay lugar para las chicas :_(
-
-
-
- Una vez sabemos representar y modificar vertices en el espacio podemos hacer
- muchisimas cosas, asi que os dejo de tiempo hasta la proxima Phymosys Magazine
- para que apliqueis estos conceptos basicos...lo que viene si que es bueno!:
- - Poligonos, Texturas, Plasma, Pantallas Virtuales, archivos graficos,
- efector, y un sinfin de conceptos que aprender.... Nos vemos...
-
- Si alguien tiene interes en intercanviar rutinas graficas, codigos fuente,
- utilidades y demas relacionado con la demoscene:
- amarfer@alufis34.ffisic.uv.es
-
- Por cierto, os dejo una beta del nuevo conversor de imagenes del 3D Studio que
- estoy haciendo...como no esta terminado, no incorporo el codigo fuente. Si a
- alguno le interesa, ya sabe mi direccion...
- ==============================================================================
- RECOMIENDO: Sites de Grupos de demoscene...por ejemplo BLASTERSOUND, Graph 2.0
- y "Lenguaje Ensamblador y programacion de compatibles" de Prentice Hall
- ademas de todas las NEWS de demoscene.
- PROXIMO: Incorporacion de musica a demos, pantallas virtuales y poligonos.
-
-
-